A debugging data format is a means of storing information about a compiled program for use by high-level debuggers. Modern debugging data formats may store enough information to allow source-level debugging. The Debugging With Attribute Record Format (DWARF) and symbol table entries (STABS) formats are the most widely used executable and linking format (ELF). Other debugging formats include common object file format (COFF), PE-COFF, object module format (OMF), and IEEE-695.
DWARF is a more recent format for ELF files. DWARF was created to overcome shortcomings in STAB, allowing for more detailed and compact descriptions of data structures, data variable movement, and complex language structures, such as in C. The debugging information is stored in sections in the object file.
The basic descriptive entity in DWARF is the debugging information entry (DIE). A DIE has a tag that specifies what the DIE describes and a list of attributes that fills in details, and further describes the entity. Attributes may contain a variety of values: constants (such as a function name), variables (such as the start address for a function), or references to another DIE (such as for the type of a function's return value).